<?php 
namespace Api\Controller;
class UserController extends CommonController{
	
	protected $m;
	
	function _initialize() {
		parent::_initialize();
		$this->m = D('Users');
	}
	
	/**
	 * @desc 用户注册接口
	 * @param string username 必须 登录名  用户名或者邮箱
	 * @param string password 必须 密码  请用MD5进行加密
	 * @return int code 操作码，200表示注册成功，412表示登录名已存在，413注册失败，414登录名不能为空
	 * @return string msg 提示信息
	 */
	public function reg(){
		$username = I('request.username');
		$password = I('request.password');
		$map['username|email|mobile'] = $username;
		$user =$this->m->where($map)->find();
		if($username){
			if($user){
				$this->retjson(412,'', '登录名已存在');
			}else{
				//判断登录名是否是邮箱
				if(preg_match(C('pattern_email'), $username)){
					$data = array(
							'email' => $username,
					);
				}else{
					$data = array(
							'username' => $username,
					);
				}
				$data['password'] =  md5($password);
				$data['role'] = '|ROLE_USER|';
				$data['create_time'] = $data['update_time'] = Date('Y-m-d H:i:s');
				if($this->m->add($data)){
					$this->retjson(200,'', '注册成功');
				}else{
					$this->retjson(413,'', '注册失败');
				}
			}
		}else{
			$this->retjson(414,'', '登录名不能为空');
		}

	}
	
	/**
	 * @desc 用户登录接口
	 * @param string username 必须 登录名  用户名或者邮箱
	 * @param string password 必须 密码  请用MD5进行加密
	 * @return int code 操作码，200表示成功，410表示登录名不存在，411表示密码错误
	 * @return array data 用户信息（只有登录成功才返回用户信息）
	 * @return string msg 提示信息
	 */
	public function login(){
		$username = I('request.username');
		$password = I('request.password');
		$map['username|email'] = $username;
		$user =$this->m->where($map)->find();
		if($user){
			if($user['password'] === $password){
				$this->retjson(200,$user, '登录成功');
			}else{
				$this->retjson(411,'', '密码错误');
			}
		}else{
			$this->retjson(410,'', '登录名不存在');
		}
	}
	
	/**
	 * @desc 找回密码接口，（PS：暂定凭手机号或者邮箱找回密码）
	 * @param string find 必须 手机号码或邮箱
	 * @return string msg 提示信息
	 */
	public function findpwd(){
		$find = I('request.find');
		if(preg_match(C('pattern_mobile'), $find)){
			$map['mobile'] = $find;
			$str_error = '手机号码不存在';
			$t = 'mobile';
		}elseif (preg_match(C('pattern_email'), $find)){
			$map['email'] = $find;
			$str_error = '邮箱不存在';
			$t = 'email';
		}else{
			$this->retjson(439,'', '请输入手机号码或者邮箱');
			exit();
		}
		
		//生成随机密码
		$char = get_rand_char(6);
		$data['password'] = md5($char);
		if(!$this->m->where($map)->find()){
			$this->retjson(440,'', $str_error);
			exit();
		}
		if($this->m->where($map)->save($data)){
			$sms = new \Users\Logic\SmsLogic();
			$content = "密码重设为".$char;
			if($t == 'mobile'){
				if(SMS_SEND($find,$content) == 1){
					$this->retjson(200,'', '密码已发送');
				}else{
					$this->retjson(441,'', '发送失败');
				}
			}
			if($t == 'email'){
				$sendemail = new \Users\Service\EmailService();
				$title = "这是一封重要的邮件";
				if($sendemail->sendemail($find, $title, $content)){
					$this->retjson(200,'', '密码已发送');
				}else{
					$this->retjson(442,'', '邮件发送失败');
				}
			}
		}
	}
	
	/**
	 * @desc 检测验证码
	 * @param string mobile 必须 手机
	 * @param string code 必须 验证码
	 * @param string type 必须 分类
	 * @return string msg 提示信息
	 */
	public function checkcode(){
		$mobile = I('request.mobile');
		$code = I('request.code');
		$type = I('request.type');
		if(!$mobile){
			$this->retjson(435,'', '手机号码为空');
			exit();
		}
		if(!$code){
			$this->retjson(436,'', '验证码为空');
			exit();
		}
		if(!$type){
			$this->retjson(437,'', '验证码类别为空');
			exit();
		}
		$sms = new \Users\Logic\SmsLogic();
		if($sms->_check_code($mobile, $code, $type)){
			$this->retjson(200, '', '验证码正确');
		}else{
			$this->retjson(438, '', '验证码错误');
		}
		
	}
	
	
	
	/**
	 * @desc 用于获取单个用户基本信息
	 * @param int userid 必须 用户ID
	 * @return int code 操作码，200表示成功，415表示用户不存在，416用户id为空
	 * @return data info 用户信息对象
	 * @return int data.uid 用户ID
	 * @return string data.username 用户名
	 * @return string data.nickname 昵称
	 * @return string data.email 邮箱
	 * @return string data.mobile 手机
	 * @return string data.avater 本地头像
	 * @return string data.headimg 远程头像
	 * @return string data.openid 第三方openid
	 * @return string msg 提示信息
	 */
	public function single(){
		$uid = I('request.userid');
		if($uid){
			$info = $this->m->where('uid = '.$uid)->find();
			if($info){
				$data = array(
						'userid'   => $info['uid'],//用户id
						'username' => $info['username'],//用户名
						'nickname' => $info['nickname'],//昵称
						'email'    => $info['email'],//邮箱
						'mobile'   => $info['mobile'],//手机
						'avater'   => $info['avater'],//本地头像
						'headimg'  => $info['headimgurl'],//头像
						'openid'   => $info['openid'],//远程openid
				);
				$this->retjson(200,$data, '登录成功');
			}else{
				$this->retjson(415,'', '获取用户信息失败');
			}	
		}else{
			$this->retjson(416,'', '用户id为空');
		}
	}
	
}